...很多个不同端口的server 问题: 发现的结果是:采用本地的“负载均衡”速度竟然提高了好多倍。这是为什么呢? 如果nginx基于进程和事件模型,多个server并没有增加进程或者是事件的处理能力,为什么能够提供性能呢?谢谢!
作者回复:我猜测你那个dll库的API方法是阻塞的,会导致大量的进程间切换,用多线程可以缓解。有两个办法验证:1、第5部分有一节课是介绍googleperftool的,你可以使用它生成一张调用耗时图。2、第5部分还有一节课介绍观察Nginx的进程间切换,例如pidstat,观察是不是有大量的主动进程切换。Nginx在繁忙的时候不应该有主动进程切换的。
选择哪种nginx版本
作者回复:
nginx.org上有mainline和stable版本,使用stable版本就好,从1.0以后偶数版本才是stable版本。 目前nginx最新版本是1.15.8,我估计你说的是openresty吧?openresty因为包含大量C模块以及lua模块,而其团队对openresty做过大量测试,更新Nginx版本较慢,所以不能一概而论,通常使用最新版本就好。
案例
老师
1、nginx启动后创建master进程和若干woker进程,当没有客户端请求时,nginx进程是处于休眠状态的;当客户端请求过来时,nginx进程是如何被唤醒的,如何真正被CPU执行的;
2、worker进程如何如何获取到锁:accept_mutex,是否通过master进程控制的,然后由master进程通知给worker进程
作者回复:
1、通过epoll_wait被唤醒。
2、与master无关,worker进程有几种锁,多数情况下,是通过共享内存实现的,即在共享内存中用原子操作实现,具体参见ngx_shmtx_trylock方法
案例
老师,我有个疑问,1. 我nginx后端的服务因为客户流量太大报了573,那么nginx报503还是573呢?因为开发配置的nginx,我没法去调试,只能先问问。2. nginx的返回码和后端的返回码是什么样的一个对应关系呢?3. 如果在nginx上做了限流,那么给客户返回的code是什么呢?谢谢老师
作者回复:1 2、通常会透传上游的HTTP响应码,仅在你想隐藏上游错误码时,才需要考虑替换;3、默认返回 503,你可以修改limit_req_status 指令改变这个错误码
ssl
案例:hsts
ssl第一次握手还是明文传输,也不安全,现在提了一个hsts,老师可以讲一下这个吗?
作者回复:ssl第一次握手是明文传输,但它只是传输安全套件以及公钥,之后数据是用新生成的对称密钥加密过的,所以SSL是安全的。hsts主要应用在浏览器端,它是强制浏览器使用https方式,对nginx来说,只需要在返回的http头部上添加Strict-Transport-Security,告诉浏览器这个站点只能通过https访问即可。
案例:https
老师,我想问一下,您这里将的TLS套件是采用对称加密算法,那 Https 中用的又是非对称加密.这两个我觉得有点混淆啊??不只带具体是怎么一回事呐??
作者回复:
1、https其实就是http+TLS。
2、传递数据用的是对称加密,但对称加密需要的密钥如何传输呢?
3、非对称加密是用来协商出“对称加密中的密钥”的。(目前主要是椭圆曲线)
案例:私钥不能用于加密,只能用于验证身份!
如果私钥加密之后,公钥都能解密的话,岂不是很不安全吗?比较持有公钥的人不止一个,容易泄露信息啊
作者回复:私钥不能用于加密,只能用于验证身份!(私钥用于数字签名,即身份验证)
作者回复:从算法上说,私钥加密的消息,只能用公钥才能解密。然而,公钥故名思议,是被公开的,所以任何人只要想获取公钥,就能获取到,所以从应用场景上说,私钥不用于加密,而主要用于身份识别。比如,Alice发出的消息,Bob用Alice公钥成功解密,就证明确实是Alice发出的。 《Web协议详解与抓包实战》第74-77课有较详细的说明。
签名不是加密吧
作者回复:不是,签名是为了证明某段消息是由谁发出的,这里可以用到加密算法,也会用到hash算法。
例如,网站为了证明身份,就会把自己的身份信息给到CA机构,CA机构会用自己的私钥加密身份信息,并结合网站的公钥打包成数字证书。这样用户拿到网站证书后使用CA的公钥解密便完成了验签。 我的《Web协议详解与抓包实战》课程第4部分约有6节课会讲这一过程涉及到的技术。
打开nginx 的DEBUG日志
openresty
openresty只是nginx上包了新的nginx模块。
第六部分会介绍openresty,第四部分在单机上搭环境验证时,会同时搭建openresty和nginx作为反向代理。
案例:openresty的一致性hash,不均匀,你怎么看
老师,openresty的一致性hash,不均匀,你怎么看,有没有办法修改算法或者虚拟节点的多少
作者回复:nginx的第三方模块代码都能修改,而openresty的lua代码改起来成本更小,例如你说的应该是chash.lua这个文件。 问题是,你打算用一套新的算法来改么?原来是openresty的consistent hash算法,与nginx官方的consistent hash算法,都是使用了memcached中的ketama实现思想的,是经过验证的。
nginx日志
- nginx的日志文件名配置是支持变量的,配置时间变量即可实现日志的自动分隔
- 不同的location或者server下,是可以记录到不同的文件中的。包括error_log和access_log。所以,针对不同的域名、url我们可以记录到不同的文件中。
http->https
性能最关心两个指标:并发和吞吐量
nginx大并发
nginx缺点
nginx知识点
公司也是一年前从haproxy切换到nginx
apache 多线程+epoll模式
nginx作用
正向代理和反向代理
老师微博
用 OpenResty 和 Nginx 搭配使用
请问如果location里面做了rewrite,access日志记录的是2个请求还是只记录rewrite之后的请求?
nginx如何实现限流
nginx的跨域解决方案
关于$args,$arg_name 的问题
用nginx+lua来做一个高并发的支持千万级甚至上亿级的网关系统
nginx的access_log 和error_log
前后端分离
nginx源码
陶老师的《深入理解Nginx》一书
nginx.org,https: 版权:此文章版权归 One 所有,如有转载,请注明出处! 链接:可点击右上角分享此页面复制文章链接